package _11_builder_pattern.v_common;

/**
 * @Description: 导演类
 * 使用建造者模式可以使客户端不必知道产品内部组成的细节，如例子中我们就不需要关
 * 心每一个具体的模型内部是如何实现的，产生的对象类型就是CarModel。
 * 建造者独立，容易扩展
 * BenzBuilder和BMWBuilder是相互独立的，对系统的扩展非常有利
 * 便于控制细节风险
 * 由于具体的建造者是独立的，因此可以对建造过程逐步细化，而不对其他的模块产生任
 * 何影响
 * ● 相同的方法，不同的执行顺序，产生不同的事件结果时，可以采用建造者模式。
 * ● 多个部件或零件，都可以装配到一个对象中，但是产生的运行结果又不相同时，则可
 * 以使用该模式。
 * ● 产品类非常复杂，或者产品类中的调用顺序不同产生了不同的效能，这个时候使用建
 * 造者模式非常合适。
 * ● 在对象创建过程中会使用到系统中的一些其他对象，这些对象在产品对象的创建过程
 * 中不易得到时，也可以采用建造者模式封装该对象的创建过程。该种场景只能是一个补偿方
 * 法，因为一个对象不容易获得，而在设计阶段竟然没有发觉，而要通过创建者模式柔化创建
 * 过程，本身已经违反设计的最初目标。
 *
 * 建造者模式关注的是零件类型和装配工艺（顺序），这是它与工厂方法模式最大不同的
 * 地方，虽然同为创建类模式，但是注重点不同。
 * @Auther: 2019/6/18 7:57 by zhang.jy
 */

public class Director {
	private Builder builder = new ConcreteProduct();

	//构建不同的产品
	public Product getAProduct() {
		builder.setPart();
		/*
		 * 设置不同的零件，产生不同的产品
		 */
		return builder.buildProduct();
	}
}